package moduloControle;

import java.io.IOException;

import moduloAluno.Aluno;
import moduloConhecimento.Conhecimento;
import moduloConhecimento.Frases;
import moduloConhecimento.MapeamentoTeclado;
import moduloConhecimento.nivel.NaoPerteceNenhumNivelException;
import moduloConhecimento.nivel.RepositorioNiveis;
import moduloTutor.Exercicio;
import moduloTutor.Tutor;

public class Controle
{

	private Conhecimento conhecimento;

	private Tutor tutor;

	private Aluno aluno;

	private String caminhoTeclado;
	private boolean flag;

	/*
	 * public Controle(Conhecimento conhecimento, Tutor tutor, Aluno aluno) {
	 * this.conhecimento = conhecimento; this.tutor = tutor; this.aluno = aluno; }
	 */

	public Controle()
	{
		zerarSessao();
	}

	public void iniciarModulos(String caminhoPasta) throws IOException
	{
		setCaminhoTeclado(caminhoPasta);
		setTutor(new Tutor());
		setConhecimento(new Conhecimento(new MapeamentoTeclado(caminhoPasta),
				new RepositorioNiveis(caminhoPasta), new Frases(caminhoPasta)));
	}

	public void zerarSessao()
	{
		conhecimento = null;
		tutor = null;
		aluno = null;
		caminhoTeclado = null;
		flag = false;
	}

	public String avalie(String fraseAluno) throws NaoPerteceNenhumNivelException
	{
		Exercicio temp;
		
		if (flag)
		{
			flag = false;
			return(getTutor().getProximoNivel(conhecimento).getExercicio());
		}
		else
		{
			temp = getTutor().avalia(fraseAluno, conhecimento);
			if (temp.getExercicio() == null)
				return(getTutor().getProximoNivel(conhecimento).getExercicio());
			else
			{
				flag = true;
				return(temp.getExercicio());
			}
		}
		
	}
	
	public String getNivelAtual()
	{
		return(getTutor().getNivelAtual(getConhecimento()).getExercicio());
	}
	
	public Aluno getAluno()
	{
		return aluno;
	}

	public Conhecimento getConhecimento()
	{
		return conhecimento;
	}

	public Tutor getTutor()
	{
		return tutor;
	}

	private void setConhecimento(Conhecimento conhecimento)
	{
		this.conhecimento = conhecimento;
	}

	private void setTutor(Tutor tutor)
	{
		this.tutor = tutor;
	}

	public void setAluno(Aluno aluno)
	{
		this.aluno = aluno;
	}

	public String getCaminhoTeclado()
	{
		return caminhoTeclado;
	}

	private void setCaminhoTeclado(String caminhoTeclado)
	{
		this.caminhoTeclado = caminhoTeclado;
	}
}
